package com.shuhua.taskServer.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.shuhua.common.result.Result;
import com.shuhua.pojo.dto.TeamCreateDTO;
import com.shuhua.pojo.entity.Team;
import com.shuhua.pojo.vo.TeamDetailVO;
import com.shuhua.pojo.vo.TeamApplyVO;
import com.shuhua.pojo.vo.TeamWithLeaderVO;

/**
 * 班组服务接口
 */
public interface TeamService extends IService<Team> {
    
    /**
     * 创建班组
     * @param teamCreateDTO 班组创建DTO
     * @return 创建结果
     */
    Result<Team> createTeam(TeamCreateDTO teamCreateDTO);
    
    /**
     * 获取班组详情
     * @param teamId 班组ID
     * @return 班组详情
     */
    Result<Team> getTeamDetail(Long teamId);
    
    /**
     * 获取工匠创建的班组列表
     * @param craftsmanId 工匠ID
     * @return 班组列表
     */
    Result<Object> getCraftsmanTeams(Long craftsmanId);
    
    /**
     * 分页查询班组列表
     * @param current 当前页
     * @param size 每页大小
     * @param teamType 班组类型（可选）
     * @param name 班组名称（可选，模糊查询）
     * @return 分页结果
     */
    Result<Page<Team>> pageTeams(Long current, Long size, Integer teamType, String name);
    
    /**
     * 获取班组详情（包含成员信息）
     * @param teamId 班组ID
     * @return 班组详情VO
     */
    Result<TeamDetailVO> getTeamDetailWithMembers(Long teamId);
    
    /**
     * 管理员审核班组
     * @param teamId 班组ID
     * @param state 审核状态（1=审核通过，2=审核不通过）
     * @param adminId 管理员ID
     * @return 审核结果
     */
    Result<Boolean> auditTeam(Long teamId, Integer state, Long adminId);
    
    /**
     * 分页查询所有创建班组申请
     * @param current 当前页
     * @param size 每页大小
     * @param teamType 班组类型（可选）
     * @param state 审核状态（可选，0=审核中，1=审核通过，2=审核不通过）
     * @return 分页结果
     */
    Result<Page<TeamApplyVO>> pageTeamApplies(Long current, Long size, Integer teamType, Integer state);
    
    /**
     * 分页查询所有班组信息以及班组组长的信息
     * @param current 当前页
     * @param size 每页大小
     * @param teamType 班组类型（可选）
     * @param name 班组名称（可选，模糊查询）
     * @return 分页结果，包含班组信息和组长信息
     */
    Result<Page<TeamWithLeaderVO>> pageTeamsWithLeader(Long current, Long size, Integer teamType, String name);
} 